/**
 * 二次封装本次存储操作
 */

// 1. 获取数据
export const getItem = (name) => {
  const data = uni.getStorageSync(name);

  /**
   * 为什么把 JSON.parse 放到 try-catch 中？
   * 因为data可能不是 JSON 格式字符串（可能不是对象形式）
   * */
  try {
    // 获取的数据可能不是对象形式，就转换成对象再返回出去
    return JSON.parse(data);
  } catch {
    // 如果是对象形式直接返回出去
    return data;
  }
};

// 2. 存储数据
export const setItem = (name, data) => {
  // 如果传进来的数据是对象类型（转成字符串形式再传）
  if (typeof data === "object") {
    data = JSON.stringify(data);
  }

  uni.setStorageSync(name, data);
};

// 3. 删除某项数据
export const removeItem = (name) => {
  uni.removeStorageSync(name);
};

// 4. 同步清理本地数据缓存
export const clearAll = () => {
  uni.clearStorageSync();
};

/**
  @description updateItem（修改某个本地存储的数据对象中的某个属性值）
  @param {object} object 需要修改某个值的对象
  @param {string} key  需要修改该对象的key
  @param {string} key  需要修改该对象key的值
  @return {undefined}
*/
export const updateItem = (object: string, key: string, value: any) => {
  let storage = getItem(object);

  // 使用方括号语法更新对象的某个属性值
  storage[key] = value;

  setItem(object, storage);
};
